<?php
/**
 * Controller_TradersEvents
 *
 * Класс отвечает за обработку передвижения торговцев
 *
 * @author Дмитрий Кузьма <kouzma.d@gmail.com>
 * @version 1.1
 */
class Controller_TradersEvents extends Controller_BaseGameController {

	/**
	 * Конструктор контроллера
	 *
	 * @param array $arrRequest - массив, содержащий информацию о запросе к странице (элементы массива  - то что между слешами в URL)
	 */
	public function __construct(&$arrRequest) {
		parent::__construct($arrRequest);
	}
	
	/**
	 * Выбор действия по URL
	 */
	public function action() {
	 $this->_actionIndex();
	}

	/**
	 * Отображение главной страницы
	 */
	private function _actionIndex() {
		
		$objGeneral = Game_General::instance();
		$tradersAvailableToGo = $objGeneral->objPlace->getTradersAvailableToGo();
		if (isset($_POST['View_Form_TradersSending'])) {
			$objWithGameCoordinates = new View_Form_TradersSending(Service_Escape::requestDataArray('View_Form_TradersSending'));
			$this->_makeTradersEvent($objWithGameCoordinates, $tradersAvailableToGo);
		}
		else $objWithGameCoordinates = new View_Form_TradersSending();
		
		
		
		
		$this->title = $this->pageHead = Service_Translate::getText('Отправка войск');
		$this->showHeader();
			$objWithGameCoordinates->show($tradersAvailableToGo);
		$this->showFooter();
		
	}
	
	/**
	 * Осуществляет отправку войск
	 * 
	 * @param View_Form_TroopsSending $objWithGameCoordinates
	 * @param int $tradersAvailableToGo
	 */
	private function _makeTradersEvent(View_Form_TroopsSending $objWithGameCoordinates, $tradersAvailableToGo) {
		
		$objGeneral = Game_General::instance();
		$objWithGameCoordinates->validation('create');
		//$objResources = new Game_Resource($objWithGameCoordinates->g)
		$objResourcesToSend = $objWithGameCoordinates->getResourcesToGo($tradersAvailableToGo);
		
		if (!Exception_ActiveRecord::isExceptionOfModelExists(get_class($objWithGameCoordinates))) {
			$objCoordinates = new Game_Coordinates($objWithGameCoordinates);
			$speed = Game_Building_Market::getTraderSpeed();
			$moveDeltaTime = $objCoordinates->getMoveTime($speed);
			$objUnitsGroup = new Game_Unit_UnitsGroup();
			$objUnitsGroup->setCoordinates($objCoordinates);
			$objUnitsGroup->setField('ID_place_owner', $objGeneral->objPlace->id);
			$objUnitsGroup->setField('move_type', 'trade');
			$objUnitsGroup->setField('amount', ceil($objResourcesToSend->getResourcesSum() / Game_Building_Market::getOneTraderMaxResources()));
			$objUnitsGroup->save();
			Game_Unit_GroupResource::create($objUnitsGroup->id, $objResourcesToSend);
			
			$eventTime = Service_Date::getTimestampToDBSaveWithSecondsMove($moveDeltaTime);
			// Сохраняем основное событие
			$objGameEvent = new Game_Event(array(
					'ID_place' => $objGeneral->objPlace->id,
					'ID_user' => $objGeneral->objUser->id,
					'event_type' => 'trade',
					'ID_essence' => $objUnitsGroup->id,
					'amount' => 1,
					'event_time' => $eventTime,
					'event_time_additional_end' => $eventTime
			));
			$objGameEvent->save();
			
			// Сохраняем вспомогательное событие для пользователя, которому пересылают ресурсы
			$objGoalPlace = $objCoordinates->getPlace();
			if (!$objGoalPlace->getField('ID_user')) return true; // Если пользователь не нашелся, то и оповещать некого
			$objGameEvent = new Game_Event(array(
					'ID_place' => $objGoalPlace->id,
					'ID_user' => $objGoalPlace->getField('ID_user'),
					'event_type' => 'trade',
					'ID_essence' => $objUnitsGroup->id,
					'amount' => 0,
					'event_time' => $eventTime,
					'event_time_additional_end' => $eventTime
			));
			$objGameEvent->save();
			
			$objGeneral->objPlace->objResourcesWithProduction->decrease($objResourcesToSend);
			$objGeneral->objPlace->saveResourcesData();
			
			User_Session::moveToSamePage();
		}
		
		//if ($objWithGameCoordinates->save()) User_Session::moveTo(W_ADMIN . 'articles/edit/' . $objArticle->id . '/', 'Статья успешно добавлена', 1);
	}
	
}
?>